$NG.AllReady(function (page, { useBeforeClick, useValuesChange, useUpdateRows, useDataIndexChange }) {
    const mstform = $NG.getCmpApi("p_form_internal_audit");
    const grid1 = $NG.getCmpApi("p_form_audit_cnt_inner");
    const grid2 = $NG.getCmpApi("p_form_audit_cnt_outer");

    {//初始化逻辑BEGIN
        if (mstform) {
            console.log(mstform.name + ' is ready');
            cntMFilter();
        } else {
            console.error('mstform is not available');
        };
    }//初始化逻辑END


    if (page.oType == "add") {
        getInDate()
        var pc = mstform.getItem("phid_pc");
        console.log("123123");
        if (pc.getValue() > "0") {
            GetCntInfoPC(pc.getValue())
            var pcname = page.getLayout().fieldSetForm.PaymentBill.getItem("phid_pc").getRawValue().label
            $NG.updateState((updater) => {
                //文本
                updater.data.p_form_internal_audit.setProps({
                    bill_name: pcname + "内部审计",
                });
            });
        }

    }

    //项目名称变化时自动带入产品线、事业部等
    useValuesChange(({ args }) => {
        console.log(args[0]);
        //const phid_pc = args[0].pc.PhId;
        const phid_pc = args[0].phid_pc.value;
        //从项目取值
        if (phid_pc) {
            console.log(phid_pc);
            //从项目取值
            GetCntInfoPC(phid_pc)

        }
        var pcname = mstform.getItem("phid_pc").getRawValue().label
        $NG.updateState((updater) => {
            //文本
            updater.data.p_form_internal_audit.setProps({
                bill_name: pcname + "内部审计",
            });
        });
    }, "p_form_internal_audit.phid_pc");

    //合同名称变化时自动带入产品线、事业部等
    useValuesChange(({ args }) => {
        console.log(args[0]);
        //const phid_pc = args[0].pc.PhId;
        const u_ht_name = args[0].u_ht_name.value;
        //从项目取值
        if (u_ht_name) {
            console.log(u_ht_name);
            //从项目取值
            GetCntInfo(u_ht_name)

        }
    }, "p_form_internal_audit.u_ht_name");

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 定义通用的行数据处理函数
    function calculateRowSums(tables) {
        let bsbyhsAmt = 0; // u_bsbyhs_amt 总和
        let mbsdje = 0;    // u_mbsdje 总和
        let fxje = 0;      // u_fxje 总和

        tables.forEach((table, index) => {
            if (!Array.isArray(table)) {
                console.warn(`忽略非数组类型的表体数据 (索引 ${index}):`, table);
                return; // 跳过非数组类型的数据
            }

            table.forEach((row) => {
                bsbyhsAmt += parseFloat(row.u_bsbyhs_amt || 0);
                mbsdje += parseFloat(row.u_mbsdje || 0);
                fxje += parseFloat(row.u_fxje || 0);
            });
        });

        return { bsbyhsAmt, mbsdje, fxje };
    }

    // 更新表头字段的通用逻辑
    function updateAuditFields(tables) {
        const sums = calculateRowSums(tables);

        // 获取合同金额
        const u_cshte = parseFloat(mstform.getItem("u_cshte").getValue() || 0);
        if (u_cshte === 0) {
            console.error("合同金额不能为零");
            return;
        }

        // 更新表头字段，确保累加而不是覆盖
        $NG.updateState((updater) => {
            const currentProps = updater.data.p_form_internal_audit.props;

            updater.data.p_form_internal_audit.setProps({
                u_jsje: (currentProps.u_jsje || 0) + sums.bsbyhsAmt, // 累加结算金额
                u_fx_amt: (currentProps.u_fx_amt || 0) + sums.fxje, // 累加费用金额
                u_mbsd_amt: (currentProps.u_mbsd_amt || 0) + sums.mbsdje, // 累加目标设定金额
                u_pro_cnt_wcl: ((currentProps.u_mbsd_amt || 0) + sums.mbsdje) / u_cshte, // 重新计算完成率
            });
        });
    }

    // 内部审计金额计算逻辑
    useUpdateRows(({ args }) => {
        console.log("args:", args); // 打印 args 内容

        const tableA = Array.isArray(args[0]) ? args[0] : []; // 表体 A 的数据
        const tableB = Array.isArray(args[1]) ? args[1] : []; // 表体 B 的数据

        const tables = [tableA, tableB]; // 构造二维数组
        console.log("tables:", tables); // 打印 tables 内容

        updateAuditFields(tables);
    }, "p_form_audit_cnt_inner");

    // 外部审计金额计算逻辑
    useUpdateRows(({ args }) => {
        console.log("args:", args); // 打印 args 内容

        const tableA = Array.isArray(args[0]) ? args[0] : []; // 表体 A 的数据
        const tableB = Array.isArray(args[1]) ? args[1] : []; // 表体 B 的数据

        const tables = [tableA, tableB]; // 构造二维数组
        console.log("tables:", tables); // 打印 tables 内容

        updateAuditFields(tables);
    }, "p_form_audit_cnt_outer");

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function updateRecord(record) {
        record.u_bsbyhs_amt = (parseFloat(record.u_bsby) || 0) * (parseFloat(record.prc) || 0);
        record.u_bsby_amt = (parseFloat(record.u_bsby) || 0) * (parseFloat(record.prc) || 0) * (1 - (parseFloat(record.taxrate) || 0));
        record.u_bsbyc = (parseFloat(record.u_bsbyhs_amt) || 0) - (parseFloat(record.u_ljbyhs_amt) || 0);
        record.u_mbsdje = (parseFloat(record.u_mbsdsj) || 0) * (parseFloat(record.prc) || 0);
        record.u_fxje = (parseFloat(record.u_mbsdje) || 0) - (parseFloat(record.u_bsbyhs_amt) || 0);

        return record;
    }

    // 内部审计数据变更逻辑
    useDataIndexChange(({ args }) => {
        const record = args[0];
        console.log("Internal Record:", record);

        // 更新记录
        const updatedRecord = updateRecord(record);
        // 更新表格行
        grid1.updateRow(updatedRecord);
    }, "p_form_audit_cnt_inner.u_mbsdsj");

    useDataIndexChange(({ args }) => {
        const record = args[0];
        console.log("Field Changed2:", record);

        // 更新记录
        const updatedRecord = updateRecord(record);

        // 更新表格行
        grid1.updateRow(updatedRecord);
    }, "p_form_audit_cnt_inner.u_bsby");

    // 外部审计数据变更逻辑
    useDataIndexChange(({ args }) => {
        const record = args[0]; // 获取当前记录
        console.log("External Record1:", record);
        // 更新记录
        const updatedRecord = updateRecord(record);
        // 更新表格行
        grid2.updateRow(updatedRecord);
    }, "p_form_audit_cnt_outer.u_mbsdsj", "p_form_audit_cnt_outer.u_bsby");

    // 外部审计数据变更逻辑
    useDataIndexChange(({ args }) => {
        const record = args[0]; // 获取当前记录
        console.log("External Record2:", record);
        // 更新记录
        const updatedRecord = updateRecord(record);
        // 更新表格行
        grid2.updateRow(updatedRecord);
    }, "p_form_audit_cnt_outer.u_bsby");

});

function GetCntInfoPC(pcvalue) {

    $NG.execServer("GetCntInfo_sj", { pc: pcvalue }, function (res) {
        console.log(res);
        if (res.count == "1") {
            const data = JSON.parse(res.data);
            const cntid = data[0].extendObjects.cntid;
            console.log(cntid)
            GetCntInfo(cntid)
            getSbqdInfo_inner(cntid)
            getSbqdInfo_outer(cntid)

        }
        cntMFilter();

    });


}

// 获取当前时间工作周期
function getInDate() {
    $NG.execServer("getInDate", {}, (res) => {
        const date = new Date()
        if (res.count == 0) return
        const datas = JSON.parse(res.data)[0].extendObjects
        $NG.updateState((updater) => {
            updater.data.p_form_internal_audit.setProps({
                phid_cycle:{
                    label:datas.bill_name,
                    value:datas.phid
                },
                u_app_dt:`${date.getFullYear()}-${String(date.getMonth()).padStart(2,'0')}-${String(date.getDate()).padStart(2,'0')}`
            })
        })
    })
}
function GetCntInfo(htvalue) {
    $NG.execServer("GetCntInfo_sj_ht", { cnt: htvalue }, function (res) {
        console.log(res);
        if (res.count == "1") {
            const data = JSON.parse(res.data);
            const ht_no = data[0].extendObjects.htno;
            const jf = data[0].extendObjects.jf;
            const jf_name = data[0].extendObjects.jf_name;
            const yf = data[0].extendObjects.yf;
            const yf_name = data[0].extendObjects.yf_name;
            const cntid = data[0].extendObjects.cntid;
            const cntname = data[0].extendObjects.cntname;
            const syb = data[0].extendObjects.syb;
            const syb_name = data[0].extendObjects.syb_name;
            const xmjl = data[0].extendObjects.xmjl;
            const xmjl_name = data[0].extendObjects.xmjl_name;
            const qzbgje = data[0].extendObjects.qzbgje || 0;
            const qdmll = data[0].extendObjects.qdmll || 0;
            const dqmll = data[0].extendObjects.dqmll || 0;
            const htxe = data[0].extendObjects.htxe || 0;
            const cshte = data[0].extendObjects.cshte || 0;
            const sywzje = data[0].extendObjects.sywzje || 0;
            const descript = data[0].extendObjects.descript;
            const ljcz = data[0].extendObjects.ljcz || 0;
            const ljby = data[0].extendObjects.ljby || 0;

            $NG.updateState((updater) => {
                updater.data.p_form_internal_audit.setProps({
                    u_cnt_no: ht_no,
                    u_qzbgje: qzbgje,
                    u_qdmll: qdmll,
                    u_dqmll: dqmll,
                    u_htxe: htxe,
                    u_cshte: cshte,
                    u_sywzje: sywzje,
                    u_xmgk: descript,
                    u_sywzje: sywzje,
                    u_xmgk: descript,
                    u_ht_name: {
                        value: cntid,
                        label: cntname,
                    },
                    phid_customer_ent: {
                        value: jf,
                        label: jf_name,
                    },
                    phid_supply_ent: {
                        value: yf,
                        label: yf_name,
                    },
                    u_division: {
                        value: syb,
                        label: syb_name,
                    },
                    u_xmjl: {
                        value: xmjl,
                        label: xmjl_name,
                    },
                    phid_org: {
                        value: syb,
                        label: syb_name,
                    },
                });
            });
            console.log(cntid)
            getSbqdInfo_inner(cntid)
            getSbqdInfo_outer(cntid)

        }
        cntMFilter();

    });


}
function getSbqdInfo_inner(htvalue) {

    const grid1 = $NG.getCmpApi("p_form_audit_cnt_inner");
    grid1.clearRows();
    $NG.execServer('getsbqdinfo_ht', { ht: htvalue }, function (res) {
        if (res.count == 0) return;
        const data = JSON.parse(res.data);
        var gridArr = []; // 定义表体数组
        var gridCount = res.count; // 增加的行数, 可根据从数据库中取出的数据总数增行
        for (var i = 0; i < gridCount; i++) {
            // 列出需要赋值的表体字段
            var gridObj = {
                u_sbqd_no: '',
                u_sbqd_name: '',
                u_ggxh: '',
                u_jscs: '',
                u_unit: '',
                prc: '',
                qty: '',
                u_sbqd_qty: '',
                u_ljbygcl: '',
                u_ljbyhs_amt: '',
                taxrate: '',
                u_ljbyse: '',
                u_bsby: '',
                u_bsbyhs_amt: '',
                u_bsby_amt: '',
                u_bsbyc: ''
            };
            gridObj.u_sbqd_no = data[i].extendObjects.u_equipment_list_no;
            gridObj.u_sbqd_name = data[i].extendObjects.sbid;
            gridObj.u_sbqd_name_EXName = data[i].extendObjects.u_equipment_list_name
            gridObj.u_ggxh = data[i].extendObjects.u_spec;
            gridObj.u_jscs = data[i].extendObjects.u_tech_params;
            gridObj.u_unit = data[i].extendObjects.u_msunit;
            gridObj.u_unit_EXName = data[i].extendObjects.msname;
            gridObj.prc = data[i].extendObjects.u_cnt_prc_vat;
            gridObj.qty = data[i].extendObjects.u_qty;
            gridObj.u_sbqd_qty = data[i].extendObjects.u_qty;
            gridObj.u_ljbygcl = data[i].extendObjects.ljbysl;
            gridObj.u_ljbyhs_amt = data[i].extendObjects.ljbyje_vat;
            gridObj.taxrate = data[i].extendObjects.u_cnt_item_tax_rate;
            gridObj.u_bsby = data[i].extendObjects.ljbssl;
            gridObj.u_bsbyhs_amt = data[i].extendObjects.byhsje;
            gridObj.u_bsby_amt = data[i].extendObjects.bywsje;
            gridObj.u_bsbyc = data[i].extendObjects.bsbyce;
            gridObj.u_ljbyse = data[i].extendObjects.ljbyse;

            gridArr.push(gridObj);
        }

        // 清空表格内容（放在循环外部）
        grid1.clearRows();

        // 调用新增表体行数据的函数
        grid1.addRows(gridArr);

        // 更新RichHelp字段（如果需要）
        // 这里假设有一个方法可以刷新或重新渲染表格，以确保RichHelp字段正确显示
        grid1.refreshView(); // 或者使用grid.refreshData();
    });



}


function getSbqdInfo_outer(htvalue) {
    const grid2 = $NG.getCmpApi("p_form_audit_cnt_outer");
    grid2.clearRows();
    $NG.execServer('getsbqdinfo_ht_out', { ht: htvalue }, function (res) {
        if (res.count == 0) return;
        const data = JSON.parse(res.data);
        var gridArr = []; // 定义表体数组
        var gridCount = res.count; // 增加的行数, 可根据从数据库中取出的数据总数增行

        for (var i = 0; i < gridCount; i++) {
            // 列出需要赋值的表体字段
            var gridObj = {
                u_sbqd_no: '',
                u_sbqd_name: '',
                u_ggxh: '',
                u_jscs: '',
                u_unit: '',
                prc: '',
                qty: '',
                u_sbqd_qty: '',
                u_ljbygcl: '',
                u_ljbyhs_amt: '',
                taxrate: '',
                u_ljbyse: '',
                u_bsby: '',
                u_bsbyhs_amt: '',
                u_bsby_amt: '',
                u_bsbyc: ''
            };
            gridObj.u_sbqd_no = data[i].extendObjects.u_equipment_list_no;
            gridObj.u_sbqd_name = data[i].extendObjects.sbid;
            gridObj.u_sbqd_name_EXName = data[i].extendObjects.u_equipment_list_name
            gridObj.u_ggxh = data[i].extendObjects.u_spec;
            gridObj.u_jscs = data[i].extendObjects.u_tech_params;
            gridObj.u_unit = data[i].extendObjects.u_msunit;
            gridObj.u_unit_EXName = data[i].extendObjects.msname;
            gridObj.prc = data[i].extendObjects.u_cnt_prc_vat;
            gridObj.qty = data[i].extendObjects.u_qty;
            gridObj.u_sbqd_qty = data[i].extendObjects.u_qty;
            gridObj.u_ljbygcl = data[i].extendObjects.ljbysl;
            gridObj.u_ljbyhs_amt = data[i].extendObjects.ljbyje_vat;
            gridObj.taxrate = data[i].extendObjects.u_cnt_item_tax_rate;
            gridObj.u_bsby = data[i].extendObjects.ljbssl;
            gridObj.u_bsbyhs_amt = data[i].extendObjects.byhsje;
            gridObj.u_bsby_amt = data[i].extendObjects.bywsje;
            gridObj.u_bsbyc = data[i].extendObjects.bsbyce;
            gridObj.u_ljbyse = data[i].extendObjects.ljbyse;

            gridArr.push(gridObj);
        }

        // 清空表格内容（放在循环外部）
        grid2.clearRows();

        // 调用新增表体行数据的函数
        grid2.addRows(gridArr);

        // 更新RichHelp字段（如果需要）
        // 这里假设有一个方法可以刷新或重新渲染表格，以确保RichHelp字段正确显示
        grid2.refreshView(); // 或者使用grid.refreshData();
    });



}

//合同根据项目ID过滤
function cntMFilter() {
    $NG.updateUI((updater, state) => {
        console.log('过滤参数检查', updater);
        updater.fieldSetForm.p_form_internal_audit.u_ht_name.setProps({
            onBeforeOpen: async () => {
                var phid_pc = $NG.getCmpApi('p_form_internal_audit').getItem('phid_pc').getValue();
                if (!phid_pc) {
                    $NG.alert("请先选择项目");
                    return false;
                } else {
                    return true;
                }
            },
            ...(!!$NG.getCmpApi('p_form_internal_audit').getItem('phid_pc').getValue() && {
                clientSqlFilter: {
                    'pcm3_cnt_m.phid_pc': $NG.getCmpApi('p_form_internal_audit').getItem('phid_pc').getValue()
                }
            }),
        });
    });
}


